package com.torresquintero.oncologos.common.factory;

import java.util.List;

import com.torresquintero.oncologos.entidades.EPS;
import com.torresquintero.oncologos.entidades.IPS;
import com.torresquintero.oncologos.entidades.Laboratorio;
import com.torresquintero.oncologos.entidades.Medico;
import com.torresquintero.oncologos.entidades.Procedimiento;
import com.torresquintero.oncologos.entidades.Proveedor;
import com.torresquintero.oncologos.entidades.Rol;
import com.torresquintero.oncologos.enumeraciones.GrupoTerapeuticoEnum;
import com.torresquintero.oncologos.enumeraciones.MotivoConsultaEnum;
import com.torresquintero.oncologos.enumeraciones.SexoEnum;
import com.torresquintero.oncologos.enumeraciones.SistemaEnum;
import com.torresquintero.oncologos.enumeraciones.TipoDocumentoEnum;
import com.torresquintero.oncologos.enumeraciones.TipoProcedimietoEnum;
import javax.persistence.EntityManager;

/**
 * Clase utilitaria para generar listas de entidades
 * que se usaran en toda la aplicacion.
 * @author Camilo Andres
 *
 */
@SuppressWarnings("unchecked")
public class FactoryData {

	/**
	 * genera la lista de tipos de documentos.
	 * @return arreglo de tipos de documentos.
	 */
	public static TipoDocumentoEnum[] getTipoDocumentos(){
		return TipoDocumentoEnum.values();
	}
	/**
	 * Genera la lista de tipo de procedimientos.
	 */
	public static TipoProcedimietoEnum[] getTiposProcedimientos(){
		return TipoProcedimietoEnum.values();
	}
	
	/**
	 * Metodo para listar todas las quimioterapias.
	 * @return lista de procedimientos tipoQuimioterapia.
	 */
	public  static List<Procedimiento> getQuimioTerapia(){
		return FactoryEntityManager.getEm().createNamedQuery(Procedimiento.FIND_PROCEDIMIENTO_BY_TIPO_PROCEDIMIENTO)
		.setParameter(Procedimiento.PARAMETRO_TIPO_PROCEDIMIENTO, TipoProcedimietoEnum.QUIMIOTERAPIA).getResultList();	
	}
	
	/**
	 * Metodo para listar todas los controles.
	 * @return lista de procedimientos tipo Control.
	 */
	public static List<Procedimiento> getControles(){
		return FactoryEntityManager.getEm().createNamedQuery(Procedimiento.FIND_PROCEDIMIENTO_BY_TIPO_PROCEDIMIENTO)
				.setParameter(Procedimiento.PARAMETRO_TIPO_PROCEDIMIENTO, TipoProcedimietoEnum.CONTROL).getResultList();
	}
	
	/**
	 * Metodo para listar todos los examenes.
	 * @return lista de procedimientos tipo Examen.
	 */
	public static List<Procedimiento> getExamenes(){
		return FactoryEntityManager.getEm().createNamedQuery(Procedimiento.FIND_PROCEDIMIENTO_BY_TIPO_PROCEDIMIENTO)
				.setParameter(Procedimiento.PARAMETRO_TIPO_PROCEDIMIENTO, TipoProcedimietoEnum.EXAMEN).getResultList();
	}
	
	/**
	 * Metodo para listar todos los laboratorios.
	 *  @return lista de laboratorios.
	 */
	public static List<Laboratorio> getLaboratorios(){
		return FactoryEntityManager.getEm().createNamedQuery(Laboratorio.FIND_ALL).getResultList();
	}
	
	/**
	 * Metodo para listar todas las IPS.
	 * @return lista de IPS.
	 */
	public static List<IPS> getISP(){
		return FactoryEntityManager.getEm().createNamedQuery(IPS.FIND_ALL).getResultList();
	}
	
	/**
	 * Metodo para listar todas las EPS.
	 * @return lista de EPS.
	 */
	public static List<EPS> getEPS(){
		return FactoryEntityManager.getEm().createNamedQuery(EPS.FIND_ALL).getResultList();
	}
	
	/**
	 * Metodo para listar todos los proveedores.
	 * @return lista de proveedores.
	 */
	public static List<Proveedor> getProveedores(){
		return FactoryEntityManager.getEm().createNamedQuery(Proveedor.FIND_ALL).getResultList();
	}
	
	/**
	 * Metodo para litar todos los medicos.
	 * @return lista de medicos.
	 */
	public static List<Medico> getMedicos(){
		return FactoryEntityManager.getEm().createNamedQuery(Medico.FIND_ALL).getResultList();
	}
	
	/**
	 * Metodo para listar todos los roles.
	 * @return lista de roles.
	 */
	public static List<Rol> getRoles(){
		return FactoryEntityManager.getEm().createNamedQuery(Rol.FIND_ALL).getResultList();
	}
	
	/**
	 * Genera la lista de grupos terapeuicos.
	 * @return lista de grupos terapeuticos.
	 */
	public static GrupoTerapeuticoEnum[] getGruposTerapeuticosEnum(){
		return GrupoTerapeuticoEnum.values();
	}

	/**
	 * Genera la lista de sexos.
	 * @return lista de sexos.
	 */
	public static SexoEnum[] getSexosEnum(){
		return SexoEnum.values();
	}
	
	/**
	 * Genera la lista de sistema corporal.
	 * @return lista de sistema corporal.
	 */
	public static SistemaEnum[] getSistemasEnum(){
		return SistemaEnum.values();
	}
	
	/**
	 * Genera la lista de motivos de una consulta.
	 * @return lista de motivos de una consulta.
	 */
	public static MotivoConsultaEnum[] getMotivosConsultaEnum(){
		return MotivoConsultaEnum.values();
	}
         
}
